﻿#region Header
// Copyright 2007-2011, Jerónimo Milea
// 
// This file is part of NetJsWire.
// 
//     NetJsWire is free software: you can redistribute it and/or modify
//     it under the terms of the GNU General Public License as published by
//     the Free Software Foundation, either version 3 of the License, or
//     (at your option) any later version.
// 
//     NetJsWire is distributed in the hope that it will be useful,
//     but WITHOUT ANY WARRANTY; without even the implied warranty of
//     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//     GNU General Public License for more details.
// 
//     You should have received a copy of the GNU General Public License
//     along with NetJsWire.  If not, see <http://www.gnu.org/licenses/>.
#endregion

using System;
using System.ComponentModel;
using System.Globalization;

namespace NetJsWire.Widgets.Data
{
    public class SortInfoConverter : ExpandableObjectConverter
    {
        public override bool CanConvertFrom( ITypeDescriptorContext context, Type sourceType )
        {
            return sourceType == typeof( SortInfo ) || sourceType == typeof( string ) || base.CanConvertFrom( context, sourceType );
        }
        public override object ConvertFrom( ITypeDescriptorContext context, CultureInfo culture, object value )
        {
            if ( value != null && value is string )
            {
                var vals = value.ToString().Split( ',' );
                SortDir sDir;
                Enum.TryParse( vals[ 1 ].Trim(), out sDir );
                return new SortInfo
                           {
                    Direction = sDir,
                    SortProperty = vals[ 0 ].Trim()
                };
            }
            return base.ConvertFrom( context, culture, value );
        }
        public override object ConvertTo( ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType )
        {
            if ( destinationType == typeof( string ) && value != null )
            {
                var sInfo = value as SortInfo;
                if ( !string.IsNullOrWhiteSpace( sInfo.SortProperty ) )
                {
                    return sInfo.SortProperty + ", " + sInfo.Direction;
                }

                return null;
            }

            return base.ConvertTo( context, culture, value, destinationType );
        }
    }
}
